function foo() {
    var a = 1;
    console.log(this.a);
}
var a = 2;
foo() // 2

var obj = {
    a: 3,
    foo: foo
}
obj.foo() // 3

/**
 * 以上两种情况，this 只依赖于调用函数前的对象，优先级是第二个情况大于第一个情况
 * 以下情况是优先级最高的，this 只会绑定在 c 上，不会被任何方式修改 this 指向
 * 还有种情况就是利用 call，apply，bind 改变 this，优先级仅次于 new
 */

var c = new foo();
c.a = 4;
console.log(c.a) // 4
